home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 February / Macworld (1999-02).dmg / Cinema 4D GO demo / Gumption Plug-ins / Plug-ins / Freeware / Spiral / spiral.cof
Text File  |  1998-02-17  |  3KB  |  109 lines

  1. // Made by Mikael Sterner 1997     Thanks to: Checkerboard_c.cof and hexedit :-)
  2.  
  3. FillData(data)
  4. {
  5.     // count
  6.     data->SetValue(0,6.0);
  7.     data->SetValue(1,1.0);
  8.  
  9.     // color 1
  10.     data->SetValue(2,1.0);
  11.     data->SetValue(3,0.0);
  12.     data->SetValue(4,0.0);
  13.  
  14.     // color 2
  15.     data->SetValue(5,0.0);
  16.     data->SetValue(6,0.0);
  17.     data->SetValue(7,1.0);
  18. }
  19.  
  20. EditData(data)
  21. {
  22.     // Make new dialog
  23.     var d=new(SimpleDialog);
  24.  
  25.     // Set edit fields of dialog
  26.     d->SetData(0,"Spiral size",FIELD_FLOAT,0.01,100000,data->GetValue(0));
  27.     d->SetData(1,"Rotations/second",FIELD_FLOAT,-100000,100000,data->GetValue(1));
  28.  
  29.     d->SetData(2,"Red   1",FIELD_PERCENT,0.0,1.0,data->GetValue(2));
  30.     d->SetData(3,"Green 1",FIELD_PERCENT,0.0,1.0,data->GetValue(3));
  31.     d->SetData(4,"Blue  1",FIELD_PERCENT,0.0,1.0,data->GetValue(4));
  32.  
  33.     d->SetData(5,"Red   2",FIELD_PERCENT,0.0,1.0,data->GetValue(5));
  34.     d->SetData(6,"Green 2",FIELD_PERCENT,0.0,1.0,data->GetValue(6));
  35.     d->SetData(7,"Blue  2",FIELD_PERCENT,0.0,1.0,data->GetValue(7));
  36.  
  37.     d->SetTitle("Rotating spiral (>0 = out  0 = fixed  <0 = in)");
  38.  
  39.     // start dialog
  40.     if (!d->DoDialog()) return FALSE;
  41.  
  42.     // if sucessful copy dialog values into key data
  43.     data->SetValue(0,d->GetData(0));
  44.     data->SetValue(1,d->GetData(1));
  45.  
  46.     data->SetValue(2,d->GetData(2));
  47.     data->SetValue(3,d->GetData(3));
  48.     data->SetValue(4,d->GetData(4));
  49.  
  50.     data->SetValue(5,d->GetData(5));
  51.     data->SetValue(6,d->GetData(6));
  52.     data->SetValue(7,d->GetData(7));
  53.  
  54.   return TRUE;
  55. }
  56.  
  57. GetOutput(data,p,n,time)
  58. {
  59.     var c,c1,c2,x,y,angle,r;
  60.  
  61.       time = time*(data->GetValue(1)*(-1));
  62.  
  63.       time = time-floor(time);
  64.  
  65.       x = ( p.x - 0.5 ) * 2;
  66.       y = ( p.y - 0.5 ) * 2;
  67.  
  68.       r = sqrt(x*x + y*y); // calculate distance from center
  69.       
  70.       if (x>0) {
  71.         if (y>0) angle = atan(x/y);
  72.         else angle = abs(atan(y/x))+(atan(1)*2);
  73.       }
  74.  
  75.       if (x<0) {
  76.         if (y<0) angle = atan(x/y)+(atan(1)*4);
  77.         else angle = abs(atan(y/x))+(atan(1)*6);
  78.       }
  79.  
  80.       if (angle!=0) angle = angle / ((atan(1))*8); // 74
  81.  
  82.     c1 = vector(data->GetValue(2),data->GetValue(3),data->GetValue(4));
  83.     c2 = vector(data->GetValue(5),data->GetValue(6),data->GetValue(7));
  84.  
  85.       if ((angle!=0)&&(time!=0)) angle = (angle + time)-floor(angle + time);
  86.  
  87.     r = r*data->GetValue(0); 
  88.       if (angle!=0) r = r + angle; 
  89.       r = r-floor(r);
  90.  
  91.     if (r>0.5){
  92.         c = c1;
  93.             if ((angle==0)&&(y>0)) c=c1;
  94.             if ((angle==0)&&(y<0)) c=c2;
  95.       }
  96.     else {
  97.         c = c2;          
  98.             if ((angle==0)&&(y>0)) c=c2;
  99.             if ((angle==0)&&(y<0)) c=c1;
  100.       }
  101.  
  102.  
  103.     return c;
  104. }
  105.  
  106. main()
  107. {
  108.     RegisterChannelShader(30444,8,"FillData","EditData","GetOutput");
  109. }